package com.qf.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * ==== 天道酬勤 ====
 *
 * @author douzhouzhou
 * @date 2025/3/4
 * <p>
 * ==== 行稳致远 进而有为 ====
 */
@EnableOpenApi// 开启swagger
@Configuration// 配置类
public class SwaggerConfig {
    @Value("${swagger.enabled}")
    private Boolean enabled;
    //创建API
    @Bean //@Bean 将对象交给spring容器管理, spring容器管理对象就是单例模式
    public Docket createRestApi() {
        //Docket对象是swagger的核心对象，用来配置swagger
        return new Docket(DocumentationType.OAS_30)
                // 是否启用swagger
                .enable(enabled)
                //用来创建API的基本信息，比如可以设置标题、描述、版本等
                .apiInfo(apiInfo())
                // 通过.select()方法，去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .select()
                // 设置哪些包下的controller需要被扫描到
                .apis(RequestHandlerSelectors.basePackage("com.qf"))// 扫描controller包下的所有controller
                .paths(PathSelectors.any())// 路径过滤器，过滤掉不需要的接口
                .build();// 构建 Docket 对象

    }
    private ApiInfo apiInfo() {
        // ApiInfoBuilder 对象用来构建ApiInfo对象
        return new ApiInfoBuilder()
                //设置标题
                .title("MES系统接口文档")
                // 设置描述
                .description("MES系统接口文档")
                //作者信息
                .contact(new Contact("douzhouzhou", "https://github.com/douzhouzhou", "douzhouzhou@163.com"))
                //版本号
                .version("1.0")
                .build();
    }
}
